Make gtkclipboard.c:clipboard_get_timestamp multi-backend safe
authorAlexander Larsson <alexl@redhat.com>
Thu, 7 Apr 2011 18:19:30 +0000 (20:19 +0200)
committerAlexander Larsson <alexl@redhat.com>
Thu, 7 Apr 2011 18:19:30 +0000 (20:19 +0200)
We can't just check for the backend defines, we have to do runtime checks too.

gtk/gtkclipboard.c

index e918495ffc7a52e7a2dba1ad2f06e6b6f5eda537..5dc09e59e85752cde5d06e06157087286d664db1 100644 (file)
 #include "x11/gdkx.h"
 #endif
 
+#ifdef GDK_WINDOWING_BROADWAY
+#include "broadway/gdkbroadway.h"
+#endif
+
 #ifdef GDK_WINDOWING_WIN32
 #include "win32/gdkwin32.h"
 #endif
@@ -412,14 +416,35 @@ clipboard_get_timestamp (GtkClipboard *clipboard)
 {
   GtkWidget *clipboard_widget = get_clipboard_widget (clipboard->display);
   guint32 timestamp = gtk_get_current_event_time ();
+  GdkWindow *window;
 
   if (timestamp == GDK_CURRENT_TIME)
     {
+      window = gtk_widget_get_window (clipboard_widget);
 #ifdef GDK_WINDOWING_X11
-      timestamp = gdk_x11_get_server_time (gtk_widget_get_window (clipboard_widget));
-#elif defined GDK_WINDOWING_WIN32
-      timestamp = GetMessageTime ();
+      if (GDK_IS_X11_WINDOW (window))
+       {
+         timestamp = gdk_x11_get_server_time (gtk_widget_get_window (clipboard_widget));
+       }
+      else
 #endif
+#if defined GDK_WINDOWING_WIN32
+      if (GDK_IS_WIN32_WINDOW (window))
+       {
+         timestamp = GetMessageTime ();
+       }
+      else
+#endif
+#if defined GDK_WINDOWING_BROADWAY
+      if (GDK_IS_BROADWAY_WINDOW (window))
+       {
+         timestamp = gdk_broadway_get_last_seen_time (window);
+       }
+      else
+#endif
+       {
+         /* No implementation */
+       }
     }
   else
     {